/**
 * @author Paulo Faria Reis
 * @created 15 Mar 2012
 *
 */
package controller;

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import networkoperations.Searcher;

/**
 * @author Paulo Faria Reis
 */
public class TextUI implements Runnable {
   DataStore dataStorage;

   public TextUI(DataStore dataStor) {
	dataStorage = dataStor;
   }

   /* (non-Javadoc)
    * @see java.lang.Thread#run()
    */
   @Override
   public void run(){
	BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
	int optionSelected;
	String searchFor;

	while(dataStorage.keepWorking()) {
	   System.out.println("Escolha a sua opção:");
	   System.out.println("1 - Procurar ficheiro.");
	   System.out.println("2 - Seleccionar directoria de partilha, actual (" + dataStorage.getSharedDir() + ").");
	   System.out.println("0 - Terminar.");

	   try{
		optionSelected = Integer.parseInt(bufferRead.readLine());
	   }
	   catch(IOException e){
		System.out.println("Dados inválidos!");
		continue;
	   }
	   catch(NumberFormatException e) {
		System.out.println("Apenas números!");
		continue;
	   }

	   if(optionSelected == 0) {
		dataStorage.stopWorking();
	   }
	   else if(optionSelected == 2) {
		// Perguntar por pasta.
		System.out.println("Mudar directoria de partilha ainda não implementado!");
		continue;
	   }
	   else if(optionSelected == 1) {	// Fazer pesquisa.
		try {
		   String userSelection;
		   if(dataStorage.debug()) System.out.println("Lançar uma pesquisa!");
		   System.out.println("Procurar por (palavras a pesquisar separadas por espaços.:");
		   searchFor = bufferRead.readLine();
		   Searcher askForFile = new Searcher(dataStorage);
		   askForFile.lookFor(searchFor);
		   boolean moreResults = true;
		   while(moreResults) {
			String[] results = dataStorage.getResults();
			int resultados = results.length;
			if(resultados > 0) {
			   System.out.println("0 - Cancelar escolha.");
			   for(int i = 0; i < results.length; i++) {
				System.out.print(i+1);
				System.out.println(" - " + results[i]);
			   }
			   System.out.println("\nEscolha um ficheiro da lista, 0 para desistir da pesquisa. Qualquer outra escolha renova a lista.");
			   userSelection = bufferRead.readLine();
			   if(userSelection.equalsIgnoreCase("0")) {
				moreResults = false;
				continue;
			   }
			   int fileSelected = Integer.getInteger(userSelection) - 1;
			   if(fileSelected < resultados || fileSelected >= 0) {
				dataStorage.newDownload(fileSelected);
			   }
			}
			System.out.println("Ainda resultados, continuar (s/n)?");
			userSelection = bufferRead.readLine();
			if(userSelection.equalsIgnoreCase("n")) {
			   moreResults = false;
			}
		   } 
		} catch (IOException e) {
		   System.out.println("Valores inválidos para pesquisa!");
		   continue;
		}
		continue;
	   }
	   else {
		System.out.println("Opção inválida!");
		continue;
	   }
	}
	System.out.println("Até breve.");
   }

   /**
    *  Tells thread to stop.
    */
   public void myStop() {
	dataStorage.stopWorking();
	return;
   }
}